package org.db.ui;

import java.util.List;
import java.util.SortedSet;

import javax.swing.JTable;

import org.db.Manager;
import org.db.dao.KruemmungslinienDAO;

public class KruemmungslinienTable extends JTable {

	private static final long serialVersionUID = 6998492030674392215L;

	private ColorTableCellRenderer renderer;

	public KruemmungslinienTable() {
		setModel(new KruemmungslinienTableModel());
		registerCellRenderer();
		// Tabelle initial mit bisherigen KrümmunslinienElementen füllen
		((KruemmungslinienTableModel) getModel())
				.addKruemmungslinienElemente(Manager.getInstance()
						.getKruemmungslinienElemente());
	}

	public void addKruemmungslinienElement(KruemmungslinienDAO dao) {
		((KruemmungslinienTableModel) getModel())
				.addKruemmungslinienElement(dao);
	}

	public void replaceKruemmungslinienElement(KruemmungslinienDAO oldDao,
			KruemmungslinienDAO newDao) {
		((KruemmungslinienTableModel) getModel())
				.replaceKruemmungslinienElement(oldDao, newDao);
	}

	public void addKruemmungslinienElemente(SortedSet<KruemmungslinienDAO> daos) {
		((KruemmungslinienTableModel) getModel())
				.addKruemmungslinienElemente(daos);
	}

	public KruemmungslinienDAO getElementAtRow(int row) {
		return ((KruemmungslinienTableModel) getModel()).getElementAtRow(row);
	}

	public void removeKruemmungslinienElement(KruemmungslinienDAO dao) {
		((KruemmungslinienTableModel) getModel())
				.removeKruemmungslinienElement(dao);
	}

	public KruemmungslinienDAO removeKruemmungslinienElement(int rowIndex) {
		return ((KruemmungslinienTableModel) getModel())
				.removeKruemmungslinienElement(rowIndex);
	}

	public List<KruemmungslinienDAO> getKruemmungslinienElemente() {
		return ((KruemmungslinienTableModel) getModel())
				.getKruemmungslinienElemente();
	}

	public void refresh() {
		((KruemmungslinienTableModel) getModel()).fireTableDataChanged();
	}

	public void highlightCell(int row, int column) {
		renderer.highlightCell(row, column);
		refresh();
	}

	/**
	 * Highlighting der Zellen aufheben.
	 */
	public void resetHighlighting() {
		renderer.reset();
		refresh();
	}

	public boolean isEmpty() {
		return ((KruemmungslinienTableModel) getModel()).isEmpty();
	}

	private void registerCellRenderer() {
		renderer = new ColorTableCellRenderer();
		for (int i = 0; i < getColumnModel().getColumnCount(); i++) {
			getColumnModel().getColumn(i).setCellRenderer(renderer);
		}
	}

}
